package java8;

import org.junit.Test;

import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

// 函数式接口
public class Test2 {

    @Test
    public void test1() {
        // 消费型
        Consumer<String> consumer = t -> {
            System.out.println(t);
        };
        consumer.accept("ccc");

    }

    @Test
    public void test2() {
        // 消费型
        List<String> list = Arrays.asList("aaa", "ccc", "qqq");
        list.forEach(s -> System.out.println(s));
    }

    @Test
    public void test3() {
        Map<Integer, String> map = new HashMap<>();
        map.put(1, "ccc");
        map.put(2, "aaa");
        map.put(3, "ddd");
        map.put(4, "qqq");
        map.forEach((k, v) -> System.out.println(k + ": " + v));
    }

    @Test
    public void test4() {
        // 供给型接口
        Supplier<String> stringSupplier = () -> {
            return "ccc";
        };
        System.out.println(stringSupplier.get());
    }

    @Test
    public void test5() {
        // 函数型接口
        Function<Integer, String> function = (num) -> {
            return "数字是：" + num;
        };
        System.out.println(function.apply(15));
    }

    @Test
    public void test6() {
        // 断定型接口
        List<String> list = new ArrayList<>();
        list.add("cccA");
        list.add("ccc");
        list.add("cc");
        list.add("c");
        list.add("aaaC");
        list.add("aaC");
        list.add("aa");
        list.add("q");
        list.add("qq");

        list.forEach((s) -> System.out.print(s + " "));

        System.out.println();

        list.removeIf((s) -> {
            return s.length() <= 2;
        });

        list.forEach((s) -> System.out.print(s + " "));

    }
    @Test
    public void test7() {
        // 方法引用
        List<String> list = new ArrayList<>();
        list.add("cccA");
        list.add("ccc");
        list.add("aa");
        list.add("q");
        list.add("qq");

        list.forEach(System.out::println);
    }
}
